package com.yeskery.nut.extend.mcp.core.schema;

/**
 * 资源内容规范
 * @author sprout
 * 2025-04-18 09:36
 */
public abstract class ResourceContentsSchema {

    /**
     * 资源内容接口
     */
    public interface ResourceContents {

        /**
         * 资源uri
         * @return 资源uri
         */
        String uri();

        /**
         * 资源媒体类型
         * @return 资源媒体类型
         */
        String mimeType();
    }

    /**
     * 资源内容基类
     */
    public static abstract class BaseResourceContents implements ResourceContents {

        /** 资源uri */
        private String uri;

        /** 资源媒体类型 */
        private String mimeType;

        /**
         * 资源uri
         * @return 资源uri
         */
        public String getUri() {
            return uri;
        }

        /**
         * 设置资源uri
         * @param uri 资源uri
         */
        public void setUri(String uri) {
            this.uri = uri;
        }

        /**
         * 资源媒体类型
         * @return 资源媒体类型
         */
        public String getMimeType() {
            return mimeType;
        }

        /**
         * 设置资源媒体类型
         * @param mimeType 资源媒体类型
         */
        public void setMimeType(String mimeType) {
            this.mimeType = mimeType;
        }

        @Override
        public String uri() {
            return getUri();
        }

        @Override
        public String mimeType() {
            return getMimeType();
        }
    }

    /**
     * 文本资源内容
     */
    public static class TextResourceContents extends BaseResourceContents {

        /** 文本内容 */
        private String text;

        /**
         * 文本内容
         * @return 文本内容
         */
        public String getText() {
            return text;
        }

        /**
         * 设置文本内容
         * @param text 文本内容
         */
        public void setText(String text) {
            this.text = text;
        }
    }

    /**
     * 二进制资源内容
     */
    public static class BlobResourceContents extends BaseResourceContents {

        /** 二进制内容 */
        private String blob;

        /**
         * 二进制内容
         * @return 二进制内容
         */
        public String getBlob() {
            return blob;
        }

        /**
         * 设置二进制内容
         * @param blob 二进制内容
         */
        public void setBlob(String blob) {
            this.blob = blob;
        }
    }
}
